#include <REGX52.H>
#include "I2C.h"

#define AT24C02_ADDRESS		0xA0
//定义从机地址+写



/**
  * @brief  AT24C02写入一个字节
  * @param  WordAddress 要写入字节的地址
  * @param  Data 要写入的数据
  * @retval 无
  */
void AT24C02_WriteByte(unsigned char WordAddress,Data)  //此处的字地址需要自己创建，并不是由系统提供
{
	I2C_Start();  //开始
	I2C_SendByte(AT24C02_ADDRESS);  //发送从机地址+写，固定格式
	I2C_ReceiveAck();  //从机接受应答
	I2C_SendByte(WordAddress);  //发送字地址
	I2C_ReceiveAck();  //从机应答
	I2C_SendByte(Data);  //发送数据
	I2C_ReceiveAck();  //从机应答
	I2C_Stop();  //程序结束
}
//根据时序图和I2C中的拼图写出即可



/**
  * @brief  AT24C02读取一个字节
  * @param  WordAddress 要读出字节的地址
  * @retval 读出的数据
  */
unsigned char AT24C02_ReadByte(unsigned char WordAddress)
{
	unsigned char Data;
	I2C_Start();
	I2C_SendByte(AT24C02_ADDRESS);
	I2C_ReceiveAck();
	I2C_SendByte(WordAddress);
	I2C_ReceiveAck();
	I2C_Start();  //不需要Stop,用Stop会默认此数据帧已经结束
	I2C_SendByte(AT24C02_ADDRESS|0x01);  //发送从机地址+读
	//从机地址+读→0xA1  需要将AT24C02_ADDRESS的最后一位改成1即可
	I2C_ReceiveAck();  //接受应答后从机将获得总线的控制权，进行数据的传输
	Data=I2C_ReceiveByte();
	I2C_SendAck(1);  //主机回应非应答，从机未接收到应答即停止继续发送
	I2C_Stop();
	return Data;
}
